// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Admin Reports API Version reports_v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/admin-sdk/reports/'>Admin Reports API</a>
 *      <tr><th>API Version<td>reports_v1
 *      <tr><th>API Rev<td>20170315 (804)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/admin-sdk/reports/'>
 *              https://developers.google.com/admin-sdk/reports/</a>
 *      <tr><th>Discovery Name<td>admin
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Admin Reports API can be found at
 * <a href='https://developers.google.com/admin-sdk/reports/'>https://developers.google.com/admin-sdk/reports/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Admin.Reports.reports_v1
{
    /// <summary>The Reports Service.</summary>
    public class ReportsService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "reports_v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public ReportsService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public ReportsService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            activities = new ActivitiesResource(this);
            channels = new ChannelsResource(this);
            customerUsageReports = new CustomerUsageReportsResource(this);
            userUsageReport = new UserUsageReportResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "admin"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/admin/reports/v1/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "admin/reports/v1/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Admin Reports API.</summary>
        public class Scope
        {
            /// <summary>View audit reports for your G Suite domain</summary>
            public static string AdminReportsAuditReadonly = "https://www.googleapis.com/auth/admin.reports.audit.readonly";

            /// <summary>View usage reports for your G Suite domain</summary>
            public static string AdminReportsUsageReadonly = "https://www.googleapis.com/auth/admin.reports.usage.readonly";

        }



        private readonly ActivitiesResource activities;

        /// <summary>Gets the Activities resource.</summary>
        public virtual ActivitiesResource Activities
        {
            get { return activities; }
        }

        private readonly ChannelsResource channels;

        /// <summary>Gets the Channels resource.</summary>
        public virtual ChannelsResource Channels
        {
            get { return channels; }
        }

        private readonly CustomerUsageReportsResource customerUsageReports;

        /// <summary>Gets the CustomerUsageReports resource.</summary>
        public virtual CustomerUsageReportsResource CustomerUsageReports
        {
            get { return customerUsageReports; }
        }

        private readonly UserUsageReportResource userUsageReport;

        /// <summary>Gets the UserUsageReport resource.</summary>
        public virtual UserUsageReportResource UserUsageReport
        {
            get { return userUsageReport; }
        }
    }

    ///<summary>A base abstract class for Reports requests.</summary>
    public abstract class ReportsBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new ReportsBaseServiceRequest instance.</summary>
        protected ReportsBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes Reports parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "activities" collection of methods.</summary>
    public class ActivitiesResource
    {
        private const string Resource = "activities";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ActivitiesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Retrieves a list of activities for a specific customer and application.</summary>
        /// <param name="userKey">Represents the profile id or the user email for which the data should be filtered. When 'all'
        /// is specified as the userKey, it returns usageReports for all users.</param>
        /// <param
        /// name="applicationName">Application name for which the events are to be retrieved.</param>
        public virtual ListRequest List(string userKey, string applicationName)
        {
            return new ListRequest(service, userKey, applicationName);
        }

        /// <summary>Retrieves a list of activities for a specific customer and application.</summary>
        public class ListRequest : ReportsBaseServiceRequest<Google.Apis.Admin.Reports.reports_v1.Data.Activities>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string userKey, string applicationName)
                : base(service)
            {
                UserKey = userKey;
                ApplicationName = applicationName;
                InitParameters();
            }


            /// <summary>Represents the profile id or the user email for which the data should be filtered. When 'all'
            /// is specified as the userKey, it returns usageReports for all users.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userKey", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserKey { get; private set; }

            /// <summary>Application name for which the events are to be retrieved.</summary>
            [Google.Apis.Util.RequestParameterAttribute("applicationName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ApplicationName { get; private set; }

            /// <summary>IP Address of host where the event was performed. Supports both IPv4 and IPv6
            /// addresses.</summary>
            [Google.Apis.Util.RequestParameterAttribute("actorIpAddress", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ActorIpAddress { get; set; }

            /// <summary>Represents the customer for which the data is to be fetched.</summary>
            [Google.Apis.Util.RequestParameterAttribute("customerId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string CustomerId { get; set; }

            /// <summary>Return events which occurred at or before this time.</summary>
            [Google.Apis.Util.RequestParameterAttribute("endTime", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string EndTime { get; set; }

            /// <summary>Name of the event being queried.</summary>
            [Google.Apis.Util.RequestParameterAttribute("eventName", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string EventName { get; set; }

            /// <summary>Event parameters in the form [parameter1 name][operator][parameter1 value],[parameter2
            /// name][operator][parameter2 value],...</summary>
            [Google.Apis.Util.RequestParameterAttribute("filters", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filters { get; set; }

            /// <summary>Number of activity records to be shown in each page.</summary>
            /// [minimum: 1]
            /// [maximum: 1000]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> MaxResults { get; set; }

            /// <summary>Token to specify next page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Return events which occurred at or after this time.</summary>
            [Google.Apis.Util.RequestParameterAttribute("startTime", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string StartTime { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "activity/users/{userKey}/applications/{applicationName}"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userKey", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userKey",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "applicationName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "applicationName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(admin)|(calendar)|(drive)|(login)|(mobile)|(token)|(groups)|(saml)|(chat)",
                    });
                RequestParameters.Add(
                    "actorIpAddress", new Google.Apis.Discovery.Parameter
                    {
                        Name = "actorIpAddress",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "customerId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "customerId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"C.+",
                    });
                RequestParameters.Add(
                    "endTime", new Google.Apis.Discovery.Parameter
                    {
                        Name = "endTime",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(?:\.(\d+))?(?:(Z)|([-+])(\d\d):(\d\d))",
                    });
                RequestParameters.Add(
                    "eventName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "eventName",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "filters", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filters",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(.+[<,<=,==,>=,>,<>].+,)*(.+[<,<=,==,>=,>,<>].+)",
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "startTime", new Google.Apis.Discovery.Parameter
                    {
                        Name = "startTime",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(?:\.(\d+))?(?:(Z)|([-+])(\d\d):(\d\d))",
                    });
            }

        }

        /// <summary>Push changes to activities</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="userKey">Represents the profile id or the user email for which the data should be filtered. When 'all'
        /// is specified as the userKey, it returns usageReports for all users.</param>
        /// <param
        /// name="applicationName">Application name for which the events are to be retrieved.</param>
        public virtual WatchRequest Watch(Google.Apis.Admin.Reports.reports_v1.Data.Channel body, string userKey, string applicationName)
        {
            return new WatchRequest(service, body, userKey, applicationName);
        }

        /// <summary>Push changes to activities</summary>
        public class WatchRequest : ReportsBaseServiceRequest<Google.Apis.Admin.Reports.reports_v1.Data.Channel>
        {
            /// <summary>Constructs a new Watch request.</summary>
            public WatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Admin.Reports.reports_v1.Data.Channel body, string userKey, string applicationName)
                : base(service)
            {
                UserKey = userKey;
                ApplicationName = applicationName;
                Body = body;
                InitParameters();
            }


            /// <summary>Represents the profile id or the user email for which the data should be filtered. When 'all'
            /// is specified as the userKey, it returns usageReports for all users.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userKey", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserKey { get; private set; }

            /// <summary>Application name for which the events are to be retrieved.</summary>
            [Google.Apis.Util.RequestParameterAttribute("applicationName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ApplicationName { get; private set; }

            /// <summary>IP Address of host where the event was performed. Supports both IPv4 and IPv6
            /// addresses.</summary>
            [Google.Apis.Util.RequestParameterAttribute("actorIpAddress", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ActorIpAddress { get; set; }

            /// <summary>Represents the customer for which the data is to be fetched.</summary>
            [Google.Apis.Util.RequestParameterAttribute("customerId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string CustomerId { get; set; }

            /// <summary>Return events which occurred at or before this time.</summary>
            [Google.Apis.Util.RequestParameterAttribute("endTime", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string EndTime { get; set; }

            /// <summary>Name of the event being queried.</summary>
            [Google.Apis.Util.RequestParameterAttribute("eventName", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string EventName { get; set; }

            /// <summary>Event parameters in the form [parameter1 name][operator][parameter1 value],[parameter2
            /// name][operator][parameter2 value],...</summary>
            [Google.Apis.Util.RequestParameterAttribute("filters", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filters { get; set; }

            /// <summary>Number of activity records to be shown in each page.</summary>
            /// [minimum: 1]
            /// [maximum: 1000]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> MaxResults { get; set; }

            /// <summary>Token to specify next page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Return events which occurred at or after this time.</summary>
            [Google.Apis.Util.RequestParameterAttribute("startTime", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string StartTime { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Admin.Reports.reports_v1.Data.Channel Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "watch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "activity/users/{userKey}/applications/{applicationName}/watch"; }
            }

            /// <summary>Initializes Watch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userKey", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userKey",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "applicationName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "applicationName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(admin)|(calendar)|(drive)|(login)|(mobile)|(token)|(groups)|(saml)|(chat)",
                    });
                RequestParameters.Add(
                    "actorIpAddress", new Google.Apis.Discovery.Parameter
                    {
                        Name = "actorIpAddress",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "customerId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "customerId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"C.+",
                    });
                RequestParameters.Add(
                    "endTime", new Google.Apis.Discovery.Parameter
                    {
                        Name = "endTime",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(?:\.(\d+))?(?:(Z)|([-+])(\d\d):(\d\d))",
                    });
                RequestParameters.Add(
                    "eventName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "eventName",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "filters", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filters",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(.+[<,<=,==,>=,>,<>].+,)*(.+[<,<=,==,>=,>,<>].+)",
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "startTime", new Google.Apis.Discovery.Parameter
                    {
                        Name = "startTime",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(?:\.(\d+))?(?:(Z)|([-+])(\d\d):(\d\d))",
                    });
            }

        }
    }

    /// <summary>The "channels" collection of methods.</summary>
    public class ChannelsResource
    {
        private const string Resource = "channels";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ChannelsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Stop watching resources through this channel</summary>
        /// <param name="body">The body of the request.</param>
        public virtual StopRequest Stop(Google.Apis.Admin.Reports.reports_v1.Data.Channel body)
        {
            return new StopRequest(service, body);
        }

        /// <summary>Stop watching resources through this channel</summary>
        public class StopRequest : ReportsBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Stop request.</summary>
            public StopRequest(Google.Apis.Services.IClientService service, Google.Apis.Admin.Reports.reports_v1.Data.Channel body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Admin.Reports.reports_v1.Data.Channel Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "stop"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "/admin/reports_v1/channels/stop"; }
            }

            /// <summary>Initializes Stop parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "customerUsageReports" collection of methods.</summary>
    public class CustomerUsageReportsResource
    {
        private const string Resource = "customerUsageReports";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CustomerUsageReportsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Retrieves a report which is a collection of properties / statistics for a specific
        /// customer.</summary>
        /// <param name="date">Represents the date in yyyy-mm-dd format for which the data is to be fetched.</param>
        public virtual GetRequest Get(string date)
        {
            return new GetRequest(service, date);
        }

        /// <summary>Retrieves a report which is a collection of properties / statistics for a specific
        /// customer.</summary>
        public class GetRequest : ReportsBaseServiceRequest<Google.Apis.Admin.Reports.reports_v1.Data.UsageReports>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string date)
                : base(service)
            {
                Date = date;
                InitParameters();
            }


            /// <summary>Represents the date in yyyy-mm-dd format for which the data is to be fetched.</summary>
            [Google.Apis.Util.RequestParameterAttribute("date", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Date { get; private set; }

            /// <summary>Represents the customer for which the data is to be fetched.</summary>
            [Google.Apis.Util.RequestParameterAttribute("customerId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string CustomerId { get; set; }

            /// <summary>Token to specify next page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1,
            /// app_name2:param_name2.</summary>
            [Google.Apis.Util.RequestParameterAttribute("parameters", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Parameters { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "usage/dates/{date}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "date", new Google.Apis.Discovery.Parameter
                    {
                        Name = "date",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(\d){4}-(\d){2}-(\d){2}",
                    });
                RequestParameters.Add(
                    "customerId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "customerId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"C.+",
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "parameters", new Google.Apis.Discovery.Parameter
                    {
                        Name = "parameters",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(((accounts)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+,)*(((accounts)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+)",
                    });
            }

        }
    }

    /// <summary>The "userUsageReport" collection of methods.</summary>
    public class UserUsageReportResource
    {
        private const string Resource = "userUsageReport";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public UserUsageReportResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Retrieves a report which is a collection of properties / statistics for a set of users.</summary>
        /// <param name="userKey">Represents the profile id or the user email for which the data should be
        /// filtered.</param>
        /// <param name="date">Represents the date in yyyy-mm-dd format for which the data is to be
        /// fetched.</param>
        public virtual GetRequest Get(string userKey, string date)
        {
            return new GetRequest(service, userKey, date);
        }

        /// <summary>Retrieves a report which is a collection of properties / statistics for a set of users.</summary>
        public class GetRequest : ReportsBaseServiceRequest<Google.Apis.Admin.Reports.reports_v1.Data.UsageReports>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string userKey, string date)
                : base(service)
            {
                UserKey = userKey;
                Date = date;
                InitParameters();
            }


            /// <summary>Represents the profile id or the user email for which the data should be filtered.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userKey", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserKey { get; private set; }

            /// <summary>Represents the date in yyyy-mm-dd format for which the data is to be fetched.</summary>
            [Google.Apis.Util.RequestParameterAttribute("date", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Date { get; private set; }

            /// <summary>Represents the customer for which the data is to be fetched.</summary>
            [Google.Apis.Util.RequestParameterAttribute("customerId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string CustomerId { get; set; }

            /// <summary>Represents the set of filters including parameter operator value.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filters", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filters { get; set; }

            /// <summary>Maximum number of results to return. Maximum allowed is 1000</summary>
            /// [maximum: 1000]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Token to specify next page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1,
            /// app_name2:param_name2.</summary>
            [Google.Apis.Util.RequestParameterAttribute("parameters", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Parameters { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "usage/users/{userKey}/dates/{date}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userKey", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userKey",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "date", new Google.Apis.Discovery.Parameter
                    {
                        Name = "date",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(\d){4}-(\d){2}-(\d){2}",
                    });
                RequestParameters.Add(
                    "customerId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "customerId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"C.+",
                    });
                RequestParameters.Add(
                    "filters", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filters",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(((accounts)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[a-z0-9_]+[<,<=,==,>=,>,!=][^,]+,)*(((accounts)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[a-z0-9_]+[<,<=,==,>=,>,!=][^,]+)",
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "parameters", new Google.Apis.Discovery.Parameter
                    {
                        Name = "parameters",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"(((accounts)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+,)*(((accounts)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+)",
                    });
            }

        }
    }
}

namespace Google.Apis.Admin.Reports.reports_v1.Data
{    

    /// <summary>JSON template for a collection of activites.</summary>
    public class Activities : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>Each record in read response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Activity> Items { get; set; } 

        /// <summary>Kind of list response this is.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Token for retrieving the next page</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

    }    

    /// <summary>JSON template for the activity resource.</summary>
    public class Activity : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>User doing the action.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actor")]
        public virtual Activity.ActorData Actor { get; set; } 

        /// <summary>ETag of the entry.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>Activity events.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("events")]
        public virtual System.Collections.Generic.IList<Activity.EventsData> Events { get; set; } 

        /// <summary>Unique identifier for each activity record.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual Activity.IdData Id { get; set; } 

        /// <summary>IP Address of the user doing the action.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ipAddress")]
        public virtual string IpAddress { get; set; } 

        /// <summary>Kind of resource this is.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Domain of source customer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ownerDomain")]
        public virtual string OwnerDomain { get; set; } 

        

        /// <summary>User doing the action.</summary>
        public class ActorData
        {
            /// <summary>User or OAuth 2LO request.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("callerType")]
            public virtual string CallerType { get; set; } 

            /// <summary>Email address of the user.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("email")]
            public virtual string Email { get; set; } 

            /// <summary>For OAuth 2LO API requests, consumer_key of the requestor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("key")]
            public virtual string Key { get; set; } 

            /// <summary>Obfuscated user id of the user.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("profileId")]
            public virtual string ProfileId { get; set; } 

        }    

        public class EventsData
        {
            /// <summary>Name of event.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("name")]
            public virtual string Name { get; set; } 

            /// <summary>Parameter value pairs for various applications.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("parameters")]
            public virtual System.Collections.Generic.IList<EventsData.ParametersData> Parameters { get; set; } 

            /// <summary>Type of event.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("type")]
            public virtual string Type { get; set; } 

            

            public class ParametersData
            {
                /// <summary>Boolean value of the parameter.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("boolValue")]
                public virtual System.Nullable<bool> BoolValue { get; set; } 

                /// <summary>Integral value of the parameter.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("intValue")]
                public virtual System.Nullable<long> IntValue { get; set; } 

                /// <summary>Multi-int value of the parameter.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("multiIntValue")]
                public virtual System.Collections.Generic.IList<System.Nullable<long>> MultiIntValue { get; set; } 

                /// <summary>Multi-string value of the parameter.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("multiValue")]
                public virtual System.Collections.Generic.IList<string> MultiValue { get; set; } 

                /// <summary>The name of the parameter.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("name")]
                public virtual string Name { get; set; } 

                /// <summary>String value of the parameter.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("value")]
                public virtual string Value { get; set; } 

            }
        }    

        /// <summary>Unique identifier for each activity record.</summary>
        public class IdData
        {
            /// <summary>Application name to which the event belongs.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("applicationName")]
            public virtual string ApplicationName { get; set; } 

            /// <summary>Obfuscated customer ID of the source customer.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("customerId")]
            public virtual string CustomerId { get; set; } 

            /// <summary>Time of occurrence of the activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("time")]
            public virtual string TimeRaw { get; set; }

            /// <summary><seealso cref="System.DateTime"/> representation of <see cref="TimeRaw"/>.</summary>
            [Newtonsoft.Json.JsonIgnore]
            public virtual System.Nullable<System.DateTime> Time
            {
                get
                {
                    return Google.Apis.Util.Utilities.GetDateTimeFromString(TimeRaw);
                }
                set
                {
                    TimeRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
                }
            }

            /// <summary>Unique qualifier if multiple events have the same time.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("uniqueQualifier")]
            public virtual System.Nullable<long> UniqueQualifier { get; set; } 

        }
    }    

    /// <summary>An notification channel used to watch for resource changes.</summary>
    public class Channel : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The address where notifications are delivered for this channel.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("address")]
        public virtual string Address { get; set; } 

        /// <summary>Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds.
        /// Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expiration")]
        public virtual System.Nullable<long> Expiration { get; set; } 

        /// <summary>A UUID or similar unique string that identifies this channel.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Identifies this as a notification channel used to watch for changes to a resource. Value: the fixed
        /// string "api#channel".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Additional parameters controlling delivery channel behavior. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("params")]
        public virtual System.Collections.Generic.IDictionary<string,string> Params__ { get; set; } 

        /// <summary>A Boolean value to indicate whether payload is wanted. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("payload")]
        public virtual System.Nullable<bool> Payload { get; set; } 

        /// <summary>An opaque ID that identifies the resource being watched on this channel. Stable across different
        /// API versions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resourceId")]
        public virtual string ResourceId { get; set; } 

        /// <summary>A version-specific identifier for the watched resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resourceUri")]
        public virtual string ResourceUri { get; set; } 

        /// <summary>An arbitrary string delivered to the target address with each notification delivered over this
        /// channel. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("token")]
        public virtual string Token { get; set; } 

        /// <summary>The type of delivery mechanism used for this channel.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>JSON template for a usage report.</summary>
    public class UsageReport : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The date to which the record belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("date")]
        public virtual string Date { get; set; } 

        /// <summary>Information about the type of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entity")]
        public virtual UsageReport.EntityData Entity { get; set; } 

        /// <summary>ETag of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The kind of object.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Parameter value pairs for various applications.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameters")]
        public virtual System.Collections.Generic.IList<UsageReport.ParametersData> Parameters { get; set; } 

        

        /// <summary>Information about the type of the item.</summary>
        public class EntityData
        {
            /// <summary>Obfuscated customer id for the record.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("customerId")]
            public virtual string CustomerId { get; set; } 

            /// <summary>Obfuscated user id for the record.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("profileId")]
            public virtual string ProfileId { get; set; } 

            /// <summary>The type of item, can be a customer or user.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("type")]
            public virtual string Type { get; set; } 

            /// <summary>user's email.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("userEmail")]
            public virtual string UserEmail { get; set; } 

        }    

        public class ParametersData
        {
            /// <summary>Boolean value of the parameter.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("boolValue")]
            public virtual System.Nullable<bool> BoolValue { get; set; } 

            /// <summary>RFC 3339 formatted value of the parameter.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("datetimeValue")]
            public virtual string DatetimeValueRaw { get; set; }

            /// <summary><seealso cref="System.DateTime"/> representation of <see cref="DatetimeValueRaw"/>.</summary>
            [Newtonsoft.Json.JsonIgnore]
            public virtual System.Nullable<System.DateTime> DatetimeValue
            {
                get
                {
                    return Google.Apis.Util.Utilities.GetDateTimeFromString(DatetimeValueRaw);
                }
                set
                {
                    DatetimeValueRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
                }
            }

            /// <summary>Integral value of the parameter.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("intValue")]
            public virtual System.Nullable<long> IntValue { get; set; } 

            /// <summary>Nested message value of the parameter.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("msgValue")]
            public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> MsgValue { get; set; } 

            /// <summary>The name of the parameter.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("name")]
            public virtual string Name { get; set; } 

            /// <summary>String value of the parameter.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("stringValue")]
            public virtual string StringValue { get; set; } 

        }
    }    

    /// <summary>JSON template for a collection of usage reports.</summary>
    public class UsageReports : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The kind of object.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Token for retrieving the next page</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Various application parameter records.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("usageReports")]
        public virtual System.Collections.Generic.IList<UsageReport> UsageReportsValue { get; set; } 

        /// <summary>Warnings if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warnings")]
        public virtual System.Collections.Generic.IList<UsageReports.WarningsData> Warnings { get; set; } 

        

        public class WarningsData
        {
            /// <summary>Machine readable code / warning type.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("code")]
            public virtual string Code { get; set; } 

            /// <summary>Key-Value pairs to give detailed information on the warning.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("data")]
            public virtual System.Collections.Generic.IList<WarningsData.DataData> Data { get; set; } 

            /// <summary>Human readable message for the warning.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("message")]
            public virtual string Message { get; set; } 

            

            public class DataData
            {
                /// <summary>Key associated with a key-value pair to give detailed information on the warning.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("key")]
                public virtual string Key { get; set; } 

                /// <summary>Value associated with a key-value pair to give detailed information on the
                /// warning.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("value")]
                public virtual string Value { get; set; } 

            }
        }
    }
}
